package com.seguriapp.gwt.client;

import java.util.Date;
import java.util.List;

import net.customware.gwt.dispatch.client.DispatchAsync;

import com.google.gwt.event.shared.EventBus;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.History;
import com.seguriapp.common.gwt.client.AbstractSeguriAppPresenter;
import com.seguriapp.entities.MenuLink;
import com.seguriapp.gwt.client.mvp.PageChangedEvent;
import com.seguriapp.gwt.client.mvp.PageChangedEventHandler;

public class MenuPresenter extends AbstractSeguriAppPresenter implements PageChangedEventHandler {

  private Display display;
  private List<MenuLink> datosMenu;

  public MenuPresenter(DispatchAsync dispatchAsync, EventBus eventBus, PlaceController placeController, Display display, List<MenuLink> datosMenu) {
    super(dispatchAsync, eventBus, placeController);
    this.display = display;
    this.datosMenu = datosMenu;
    display.setMenuPresenter(this);
  }

  public void start() {
    if (datosMenu != null) {
      display.setDatosMenu(datosMenu);
    }
    eventBus.addHandler(PageChangedEvent.TYPE, this);
  }

  public void onPageChanged(PageChangedEvent evento) {
    final String menuId = evento.getMenuId();
    final MenuLink menuLink = new MenuLink();
    menuLink.setPath(menuId);

    // TODO select menuItem
  }

  /**
   * Navigates to the selected menu item
   */
  public void navegar(final MenuLink menuItem) {
    History.newItem(generateHistoryToken(menuItem.getPath()));
  }

  private String generateHistoryToken(final String id) {
    return id + ":" + new Date().getTime();
  }

  public interface Display {

    void setDatosMenu(List<MenuLink> list);

    void setMenuPresenter(MenuPresenter menuPresenter);

  }

}
